/*!Cette classe définit un état. Un état est défini par un ensemble d'objets de type transitions vers un état donné. Un état est donc symbolisé par les transitions */

#ifndef H_etat
#define H_etat

#include "transitions.h"
#include <map>

class etat{

	private :

		/*!entier marquant si un état est un des état finaux et contenant la référence du code à exécuter le cas échéant*/
		int final;

		///ensemble de paires (pointeur_sur_etat,transitions_vers_cet_état)
		std::map<etat*,transitions> etat_trans;

	public :

		///initialise un état initial qui ne pointe nulle part
		etat();

		///initialise un état à l'aide d'une liste d'entiers
		etat(etat* ptr, transitions tr);

		///initialise un état puits
		void etat_puits();

		///affichage d'un état
		void affichage();

		///accesseur à la variable final
		bool get_final();

		/*!accesseur à la transition vers l'état et pour le caractère de code ascii i*/
		bool get_trans(etat* et, unsigned char i);

		///accesseur à la transition vers l'état et
		transitions get_trans(etat* et);

		///accesseur à la variable etat_trans
		std::map<etat*,transitions> get_etat_trans();

		/*!accesseur au booléen décrivant s'il existe une epsilon-transition jusqu'à l'état et*/
		bool get_epsilon(etat* et);

		///mutateur de la variable final
		void set_final(int val);

		///mutateur de la transition vers l'état et pour le caractère de code ascii i*/
		void set_transition(etat* et, unsigned char i, bool val);

		///mutateur des transitions vers l'état et
		void set_transitions(etat* et, transitions trans);

		/*!mutateur du booléen décrivant s'il existe une epsilon-transition jusqu'à l'état et*/
 		void set_epsilon(etat* et, bool epsilon);
};

#endif
